#include "player.h"
#include "menu.h"
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

Player::Player()
{
    szint=1;
    kredit=0;
    penz=100;
    teljesites=0;
    ZHteljesites=0;
    allowedtofogadas = true;
    for(int i=0; i<5; ++i)
    {
        targyak[i]=false;
    }
    for(int i=0; i<4; ++i)
    {
        speciready[i]=false;
    }

}

void Player::Setplayer()
{
    nev=Nevkerdez();

    int seged;
    seged=Kasztvalaszt();
    kaszt=seged;

    switch(seged)
    {
    case 1:
        kasztolvas("kaszt/zseni.txt");
        Zsenikaszt();
        kalyhacso();
        break;
    case 2:
        kasztolvas("kaszt/streber.txt");
        Streberkaszt();
        kalyhacso();
        break;
    case 3:
        kasztolvas("kaszt/hiperaktiv.txt");
        Hiperaktivkaszt();
        kalyhacso();
        break;
    case 4:
        Gaborkaszt();
        break;
    }
}
void Player::kasztolvas(std::string fajl)
{
    std::ifstream infile;


    infile.open(fajl.c_str());
    infile>>energia;
    infile>>turelem;
    infile>>szorgalom;
    infile>>iq;
    infile>>gyorsasag;

    infile.close();

    maxenergia=energia;
    maxturelem=turelem;
}
void Player::kalyhacso()
{
    char valasz;
    valasz=GetIorN();
    if(valasz=='i')
    {
        SetEnergia(20);
        targyak[0]=true;
    }
}
void Player::Kiir() const
{
    cout<<endl;
    cout<<"\n\t\tAktualis statod"<<endl;
    cout<<"\t\t-----------------"<<endl;
    cout<<"\t\t"<<nev<<endl;
    cout<<"\t\tSzint: \t\t"<<szint<<endl;
    cout<<"\t\tKredit: \t"<<kredit<<"/"<<szint*100<<endl;
    cout<<"\t\tEnergia: \t"<<energia<<"/"<<maxenergia<<endl;
    cout<<"\t\tTurelem: \t"<<turelem<<"/"<<maxturelem<<endl;
    cout<<"\t\tSzorgalom: \t"<<szorgalom<<endl;
    cout<<"\t\tIQ: \t\t"<<iq<<endl;
    cout<<"\t\tGyorsasag: \t"<<gyorsasag<<endl;
    cout<<"\t\tPenz: \t\t"<<penz<<endl;
}
void Player::Fizet(int mennyi)
{
    penz=penz-mennyi;
}
void Player::Fizetes(int mennyi)
{
    penz=penz+mennyi;
}
void Player::SetEnergia(int mennyi)
{
    if(energia>=mennyi)
    {
        energia=energia-mennyi;
    }
    else
    {
        energia=0;
    }
}
void Player::SetEnergiaUp(int mennyi)
{
    int seged=energia+mennyi;

    if(seged<=maxenergia)
    {
        energia=seged;
    }
    else
    {
        energia=maxenergia;
    }
}
void Player::SetMaxEnergiaUp(int mennyi)
{
    maxenergia=maxenergia+mennyi;
}
void Player::SetTurelemUp(int mennyi)
{
    int seged=turelem+mennyi;

    if(seged<=maxturelem)
    {
        turelem=seged;
    }
    else
    {
        turelem=maxturelem;
    }
}
void Player::SetMaxTurelemUp(int mennyi)
{
    maxturelem=maxturelem+mennyi;
}
void Player::SetTurelem(int mennyi)
{
    if(turelem>=mennyi)
    {
        turelem=turelem-mennyi;
    }
    else
    {
        turelem=0;
    }
}
void Player::SetKredit(int mennyi)
{
    kredit=kredit+mennyi;
}
void Player::SetSzorgalom(int mennyi)
{
    szorgalom=szorgalom+mennyi;
}
void Player::SetIQ(int mennyi)
{
    iq=iq+mennyi;
}
void Player::SetGyorsasag(int mennyi)
{
    gyorsasag=gyorsasag+mennyi;
}
int Player::XpLeftToLevelUp()
{
    int seged = kredit - (szint * 100);

    return seged;
}
void Player::LevelUp(int maradek)
{
    szint++;
    kredit=maradek;

    ifstream infile;
    string filename;

    switch(kaszt)
    {
    case 1:

        filename="kaszt/levelupzseni.txt";
        break;

    case 2:

        filename="kaszt/levelupstreber.txt";
        break;

    case 3:

        filename="kaszt/leveluphiperaktiv.txt";
        break;
    }
    infile.open(filename.c_str());

    int seged;
    infile>>seged;
    SetMaxEnergiaUp(seged);
    infile>>seged;
    SetMaxTurelemUp(seged);
    infile>>seged;
    SetSzorgalom(seged);
    infile>>seged;
    SetIQ(seged);
    infile>>seged;
    SetGyorsasag(seged);
    infile>>seged;
    penz=penz+(seged+szint*5);

    infile.close();

    seged = XpLeftToLevelUp();
    if(seged >= 0)
    {
        LevelUp(seged);
    }
}
void Player::SpeciReady(int melyik)
{
    speciready[melyik-1]=true;
}
void Player::PontEloszt()
{

    int pont = 10;

    while(pont > 0)
    {
        Kiir();
        cout<<endl;
        cout<< "1 -- Maximalis energia (1 pont = 5 elet)"<<endl;
        cout<< "2 -- Maximalis turelem (1 pont = 5 turelem)"<<endl;
        cout<< "3 -- Szorgalom (1 pont = 1 szorgalom)"<<endl;
        cout<< "4 -- IQ (1 pont = 1 IQ)"<<endl;
        cout<< "5 -- Gyorsasag (1 pont = 1 gyorsasag)"<<endl;
        cout<<endl<<"Maradek pont: "<<pont<<endl;

        cout<<"Melyik tulajdonsagodat szeretned novelni? ";

        int valasz;
        valasz=GetIntBetweenXY(1,5);

        switch(valasz)
        {
        case 1:
            SetMaxEnergiaUp(5);
            break;
        case 2:
            SetMaxTurelemUp(5);
            break;
        case 3:
            SetSzorgalom(1);
            break;
        case 4:
            SetIQ(1);
            break;
        case 5:
            SetGyorsasag(1);
            break;
        }
        pont=pont-1;
    }
}
void Player::Kasztvalt()
{
    cout<<"Melyik kasztra szeretnel valtani?:"<<endl;
    cout<< "1 -- Zseni"<<endl;
    cout<< "2 -- Streber"<<endl;
    cout<< "3 -- Hiperaktiv"<<endl;

    int valasz;

    bool siker=false;

    do
    {
        valasz=GetIntBetweenXY(1,3);

        switch(valasz)
        {
        case 1:
            if(kaszt==1)
            {
                cout<<"Te mar most is Zseni vagy"<<endl;
            }
            else
            {
                kaszt=1;
                siker=true;
            }
            break;
        case 2:
            if(kaszt==2)
            {
                cout<<"Te mar most is Streber vagy"<<endl;
            }
            else
            {
                kaszt=2;
                siker=true;
            }
            break;
        case 3:
            if(kaszt==3)
            {
                cout<<"Te mar most is Hiperaktiv vagy"<<endl;
            }
            else
            {
                kaszt=3;
                siker=true;
            }
            break;
        }

    }
    while(!siker);
}
void Player::Gameover(int &hanyszor)
{
    cout<<"Mivel 3x megbuktal ezert kirugtak. De ne aggodj ha van eleg penzed es akarsz akkor ujrafelvetelizhetsz"<<endl;
    cout<<endl;
    system("pause");
    cout<<endl;

    if(penz>=300)
    {
        hanyszor=0;
        penz=penz-300;
        cout<<endl<<"Sikeresen ujrafelveteliztel. 300 forintodba kerult."<<endl;

    }
    else
    {
        cout<<endl<<"Sajnalom de nincs penzed ujrafelvetelizni. Game Over! :("<<endl;
        cout<<endl;
        system("pause");
        cout<<endl;
        throw Halal;
    }


}
void Player::SaveGame() const
{

    bool l;
    string valasz;
    string valasz2;

    do
    {
        l=false;
        cout<<"Mi legyen a mentes neve? (Kerlek ne hasznalj ekezetes betuket es specialis karaktereket)"<<endl;

        cin>>valasz;

        ifstream infile;
        infile.open("SavedGames/SaveList.txt");
        while(!infile.eof())
        {
            string akt;
            infile>>akt;
            if(valasz==akt)
            {
                l=true;
                break;
            }
        }
        if(l)
        {
            cout<<"Mar letezik mentes ezen a neven. Biztos felul szeretned irni?"<<endl;
            valasz2=GetIorN();
        }
        infile.close();
    }
    while(l && valasz2=="n");

    string seged;
    seged="SavedGames/"+valasz+".txt";
    ofstream ofile;
    ofile.open(seged.c_str());

    ofile<<kaszt<<endl;
    ofile<<energia<<endl;
    ofile<<maxenergia<<endl;
    ofile<<turelem<<endl;
    ofile<<maxturelem<<endl;
    ofile<<iq<<endl;
    ofile<<szorgalom<<endl;
    ofile<<gyorsasag<<endl;
    ofile<<szint<<endl;
    ofile<<penz<<endl;
    ofile<<kredit<<endl;
    ofile<<nev<<endl;
    ofile<<ZHteljesites<<endl;
    ofile<<teljesites<<endl;
    ofile<<allowedtofogadas<<endl;
    for(int i = 0; i<4;++i)
    {
        ofile<<targyak[i]<<" ";
    }
    ofile<<endl;
    for(int i=0;i<5;++i)
    {
        ofile<<speciready[i]<<" ";
    }

    ofile.close();
    if(!l)
    {
        ofile.open("SavedGames/SaveList.txt", ios::app);
        ofile<<valasz<<endl;

        ofile.close();
    }

    cout<<"A mentes sikeres!"<<endl;
    cout<<endl;
    system("pause");
    cout<<endl;
}
void Player::LoadGame()
{
    string seged;
    string valasz;
    ifstream infile;

    infile.open("SavedGames/SaveList.txt");
    cout<<"A mentesek listaja:"<<endl;
    cout<<endl;
    while(!infile.eof())
    {
        getline(infile,valasz);
        cout<<valasz<<endl;
    }

    do
    {
        infile.close();
        cout<<"ird be annak a mentesnek a nevet amelyiket szeretned betolteni: ";
        cin>>valasz;

        seged="SavedGames/"+valasz+".txt";
        infile.open(seged.c_str());
        if(infile.fail())
        {
            cout<<"Nem letezik ilyen mentes"<<endl;
        }
    }
    while(infile.fail());

    infile>>kaszt;
    infile>>energia;
    infile>>maxenergia;
    infile>>turelem;
    infile>>maxturelem;
    infile>>iq;
    infile>>szorgalom;
    infile>>gyorsasag;
    infile>>szint;
    infile>>penz;
    infile>>kredit;
    infile>>nev;
    infile>>ZHteljesites;
    infile>>teljesites;
    infile>>allowedtofogadas;
    for(int i = 0;i<4;++i)
    {
        infile>>speciready[i];
    }
    for(int i = 0;i<5;++i)
    {
        infile>>targyak[i];
    }

    cout<<"Sikeres Betoltes!!"<<endl;
    cout<<endl;
    system("pause");
    cout<<endl;

}

